异步处理:如何向服务器端发送请求?
实现自己的 API Client
无论大小项目,在开始实现第一个请求的时候,通常我们要做的第一件事应该都是创建一个自己的 API Client,之后所有的请求都会通过这个 Client 发出去。
实现这样一个 API Client 需要考虑哪些因素。
通常来说,会包括以下几个方面:
- 一些通用的 Header。比如 Authorization Token。 
- 服务器地址的配置。前端在开发和运行时可能会连接不同的服务器,比如本地服务器或者测试服务器,此时这个 API Client 内部可以根据当前环境判断该连接哪个 URL。 
- 请求未认证的处理。比如如果 Token 过期了,需要有一个统一的地方进行处理,这时就会弹出对话框提示用户重新登录。 
import axios from "axios";
// 定义相关的 endpoint
const endPoints = {
  test: "https://60b2643d62ab150017ae21de.mockapi.io/",
  prod: "https://prod.myapi.io/",
  staging: "https://staging.myapi.io/"
};
// 创建 axios 的实例
const instance = axios.create({
  // 实际项目中根据当前环境设置 baseURL
  baseURL: endPoints.test,
  timeout: 30000,
  // 为所有请求设置通用的 header
  headers: { Authorization: "Bear mytoken" }
});
// 听过 axios 定义拦截器预处理所有请求
instance.interceptors.response.use(
  res => {
    // 可以假如请求成功的逻辑,比如 log
    return res;
  },
  err => {
    if (err.response.status === 403) {
      // 统一处理未授权请求,跳转到登录界面
      document.location = "/login";
    }
    return Promise.reject(err);
  }
);
export default instance;